
# 多态概念
# 传入不同的对象（对象所在的子类不相同），调用相同的方法名，执行不同的工作

# Person
#    cut()
#    Actor
#    HairCutter
#    Cook

class Dog():                           # 定义一个父类 Dog
    def work(self):
        print("执行任务")

class ArmyDog(Dog):                    # 定义一个子类 ArmyDog
    def work(self):
        print('追踪罪犯')

class DrugDog(Dog):                    # 定义一个子类 DrugDog
    def work(self):
        print('追查毒品')

class Police():                        # 定义一个类 Police
    def work_with_dog(self,dog):       # 这里传入一个 自变量self  和一个控制变量dog
        dog.work()                       # 理解：控制变量加了”.“之后就变成了 类操作 即先追寻控制变量属于的类 然后再执行该类下的行为


ad = ArmyDog()            # 注意 定义一个类变量时 要记得加 （）
dd = DrugDog()

p = Police()
p.work_with_dog(dd)      # 这里的逻辑流程为： 自变量 p 调用自身类中的 work_with_dog 这个行为： dog.work 此时传入的控制变量dd 上升为类控制变量
                         # 那么就变成了 执行 dd这个类 （即 Drugdog类中的） 行为work


# 练习:
# 1.定义一个形状类Shape
    # 属性 形状的名字
    # 定义方法 求周长 getPerimeter()
    # 定义方法 求面积 getArea()

# 2.定义一个圆类   Circle       从Shape继承
    # 属性 半径
    # 重写 求周长 求面积方法   从Shape继承

# 3.矩形一个矩形类 Rectangle
    # 属性 宽高
    # 重写 求周长 求面积方法

# 4.定义一个图形绘制类 Screen
    # 方法  draw(shape) 传入一个形状
    #                  显示 绘制一个什么图形，面积xxx，周长多少
